import 'list_options.dart';

/// 上传状态枚举（Web 平台占位）。
enum UploadState { unknown, pending, success, failed }

/// 快照条目（Web 平台占位，不进行持久化）。
class LogRecord {
  final String path;
  final int sizeBytes;
  final int modifiedMs;
  final bool exists;
  final int createdMs;
  final int? deletedMs;
  final UploadState uploadState;
  final int? uploadedMs;
  final int uploadAttempts;
  final String? lastError;
  final int? year;
  final int? month;
  final int? day;

  const LogRecord({
    required this.path,
    required this.sizeBytes,
    required this.modifiedMs,
    required this.exists,
    required this.createdMs,
    this.deletedMs,
    this.uploadState = UploadState.unknown,
    this.uploadedMs,
    this.uploadAttempts = 0,
    this.lastError,
    this.year,
    this.month,
    this.day,
  });
}

/// Web 平台的日志账本占位实现：
/// - 不进行本地文件写入；
/// - 所有方法均为 no-op 或返回占位值；
/// - 保持与 IO 平台一致的 API 以便跨平台调用。
class LogLedger {
  static void setTestOverrideRoot(String? path) {}

  static Future<void> syncFromFiles(dynamic files) async {}

  static Future<void> recordDeletion(String path) async {}

  static Future<void> markUploadStarted(String path) async {}

  static Future<void> markUploadSuccess(String path) async {}

  static Future<void> markUploadFailed(String path, String? error) async {}

  /// Web 平台不支持本地文件创建事件，空实现。
  static Future<void> recordCreated(String path,
      {int? sizeBytes, int? modifiedMs, int? tsMs}) async {}

  /// 返回空列表（无持久化快照）。
  static Future<List<LogRecord>> listSummary({
    ListOptions? options,
    UploadState? uploadState,
  }) async {
    return const [];
  }

  /// Web 平台无法访问本地文件系统，返回占位文本。
  static Future<String> fileTreeAsText({int maxDepth = 4}) async {
    return 'Web 平台无法打印本地文件结构。';
  }

  /// Web 平台无法读取元数据文件，返回占位文本。
  static Future<String> readLedgerContent() async {
    return 'Web 平台无法读取 pd_log_ledger.jsonl。';
  }

  /// Web 平台无法读取元数据文件，返回占位文本。
  static Future<String> readSummaryContent() async {
    return 'Web 平台无法读取 pd_log_summary.json。';
  }

  /// Web 平台无法读取任意本地文件，返回占位文本。
  static Future<String> readFileContent(String path) async {
    return 'Web 平台无法读取本地文件: $path';
  }
}
